home *** CD-ROM | disk | FTP | other *** search
/ PC User 2003 January / Disc 3 / Amethyst.iso / rl / build-bin / pup < prev    next >
Encoding:
Text File  |  2002-06-03  |  2.9 KB  |  132 lines

  1. #!/bin/sh
  2. # pup - package update script
  3. # copyright (c) 2000, joseph cheek, joseph@redmondlinux.org
  4. # released under gpl.
  5. # $1: full pathname of package to update
  6. # ex: pup /usr/src/RedmondLinux/SRPMS/mypackage-1.1-1.src.rpm
  7. # opts: -q: quiet [don't print status messages]
  8. #       -v: verbose
  9. #       -f: force
  10.  
  11. if [ "n$1" = "n-q" ]; then # -q
  12.   QUIET="-q"
  13.   shift
  14. fi
  15.  
  16. if [ "n$1" = "n-v" ]; then # -v
  17.   VERBOSE="-v"
  18.   shift
  19. fi
  20.  
  21. if [ "n$1" = "n-f" ]; then # -f
  22.   FORCE="-f"
  23.   shift
  24. fi
  25.  
  26. # constants and vars
  27.  
  28. RL_ROOT=/opt/redmondlinux
  29. BUILD_NUM_FILE=$RL_ROOT/builds/CURRENT_BUILD
  30. BUILD_NUM=`cat $BUILD_NUM_FILE`
  31. BUILD_ROOT=$RL_ROOT/builds/$BUILD_NUM
  32. PAT_FILE=$BUILD_ROOT/en/rl/data/regex_patterns.txt
  33. # use en for pattern file
  34.  
  35. while [ $# -ge 1 ]; do
  36.  
  37.   if [ ! -r "$1" ]; then # file doesn't exist
  38.     echo `basename $0`: can\'t find \"$1\" >&2
  39.     shift ; continue
  40.   fi
  41.  
  42. # find pattern to match
  43.  
  44.   { while read LINE; do
  45.  
  46.     if [ "`echo $LINE | cut -c 1`" = "#" ] || [ "$LINE" = "" ]; then
  47. # comment or blank line, continue
  48.       continue
  49.     fi
  50.  
  51. # separate the regexp and the directory
  52.     REGEX=`echo $LINE | cut -f 1 -d \ `
  53.     DIR=`echo $LINE | cut -f 2 -d \ `
  54.     [ $VERBOSE ] && echo $REGEX = $DIR
  55.  
  56. # test for match
  57.     basename "$1" | grep -q -e $REGEX
  58.     MATCH=$[ ! $? ]
  59.     [ $VERBOSE ] && echo match = $MATCH
  60.  
  61.     [ $MATCH -eq 1 ] && break
  62.  
  63.   done } < $PAT_FILE
  64.  
  65. # match?
  66.   if [ $MATCH -eq 1 ]; then
  67. # yes, perform update
  68.     [ $VERBOSE ] && echo fup $QUIET $FORCE "$1" $DIR
  69. # we can specify a file is not to be updated by making DIR=/dev/null
  70.     [ "$DIR" = "/dev/null" ] && echo /dev/null && shift && continue
  71.     fup $QUIET $FORCE "$1" $DIR
  72.  
  73. # successful?
  74.     RETURN=$?
  75. # no, continue
  76.     [ $RETURN -gt 0 ] && shift && continue
  77. # yes, update pkgs.db
  78.  
  79.     BASENAME=`basename "$1"`
  80.     UPDATED_FILE="$BUILD_ROOT/en/$DIR/$BASENAME"
  81.  
  82. # source rpm?
  83.  
  84.     if [ "$BASENAME" = `basename "$1" .src.rpm`.src.rpm ]; then
  85.       echo source rpm, not updating && shift && continue
  86.     fi
  87.  
  88. # get needed info
  89. # packed size
  90.  
  91.     PACK_SIZE=`ls -l $UPDATED_FILE | tr -s \  | cut -d \  -f 5`
  92.  
  93. # unpacked size, package name, version, release
  94.  
  95.     eval `rpmextr --shell $UPDATED_FILE`
  96.  
  97. # update pkgs.db line
  98.  
  99.     for PKGS_DB in $BUILD_ROOT/*/rl/data/pkgs.db; do
  100. # for each language
  101.     [ $VERBOSE ] && echo PKGS_DB: $PKGS_DB
  102.  
  103.       DB_LINE=`grep \[A-Z\]*:$PKG_NAME:.* < $PKGS_DB`
  104.       [ $VERBOSE ] && echo Old DB_LINE: $DB_LINE
  105.  
  106. # if a line exists
  107.       if [ "$DB_LINE" != "" ]; then
  108.  
  109. # update it
  110.     perl -pi -e \
  111.   "s/:$PKG_NAME:(.*?:.*?):.*?:(.*?):.*?:.*::/:$PKG_NAME:\$1:$PKG_SIZE:\$2:$PACK_SIZE:$PKG_VERS-$PKG_RELEASE::/g" $PKGS_DB
  112.  
  113. # show new line
  114.     DB_LINE=`grep \[A-Z\]*:$PKG_NAME:.* < $PKGS_DB`
  115.     [ $VERBOSE ] && echo -n New DB_LINE:\ 
  116.     echo $DB_LINE
  117.       fi # if a line exists
  118.  
  119.     done # for each language
  120.  
  121.   else # match?
  122.     [ $QUIET ] || echo match not found.  no add performed.
  123.   fi
  124.  
  125.   shift # process next package
  126.  
  127. done
  128.